package view

import (
	"fmt"
	"os"
	
	"git-todo/model"
)

// TodoView 待办事项视图
type TodoView struct{}

// NewTodoView 创建新的视图实例
func NewTodoView() *TodoView {
	return &TodoView{}
}

// ShowHelp 显示帮助信息
func (v *TodoView) ShowHelp() {
	fmt.Println("git-todo - Git分支级别的待办事项管理工具")
	fmt.Println()
	fmt.Println("用法:")
	fmt.Println("  git todo add <待办事项描述>     添加新的待办事项")
	fmt.Println("  git todo list                  列出当前分支的所有待办事项")
	fmt.Println("  git todo done <ID或描述>       标记待办事项为完成")
	fmt.Println("  git todo help                  显示此帮助信息")
	fmt.Println("  git todo version               显示版本信息")
	fmt.Println()
	fmt.Println("示例:")
	fmt.Println("  git todo add \"修复登录页面的bug\"")
	fmt.Println("  git todo add \"添加用户注册功能\"")
	fmt.Println("  git todo list")
	fmt.Println("  git todo done 1")
	fmt.Println("  git todo done \"修复登录\"")
	fmt.Println()
	fmt.Println("注意:")
	fmt.Println("  - 所有操作都基于当前Git分支")
	fmt.Println("  - 只能查看和操作当前分支的待办事项")
	fmt.Println("  - 请确保在Git仓库中使用此命令")
}

// ShowVersion 显示版本信息
func (v *TodoView) ShowVersion() {
	fmt.Println("git-todo version 1.0.0")
	fmt.Println("基于Git分支的待办事项管理工具")
}

// ShowUsage 显示特定命令的用法
func (v *TodoView) ShowUsage(command, usage string) {
	fmt.Printf("用法: %s\n", usage)
}

// ShowError 显示错误信息
func (v *TodoView) ShowError(message string) {
	fmt.Fprintf(os.Stderr, "错误: %s\n", message)
}

// ShowAddSuccess 显示添加成功信息
func (v *TodoView) ShowAddSuccess(description, branch string) {
	fmt.Printf("✓ 已在分支 '%s' 中添加待办事项: %s\n", branch, description)
}

// ShowCompleteSuccess 显示完成成功信息
func (v *TodoView) ShowCompleteSuccess(identifier, branch string) {
	fmt.Printf("✓ 已在分支 '%s' 中标记待办事项为完成: %s\n", branch, identifier)
}

// ShowTodoList 显示待办事项列表
func (v *TodoView) ShowTodoList(todos []model.TodoItem, branch string) {
	if len(todos) == 0 {
		fmt.Printf("分支 '%s' 中没有待办事项\n", branch)
		return
	}
	
	fmt.Printf("分支 '%s' 的待办事项:\n", branch)
	fmt.Println("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
	
	for _, todo := range todos {
		// 格式化创建时间
		timeStr := todo.CreatedAt.Format("2006-01-02 15:04")
		
		// 显示待办事项
		fmt.Printf("[%d] %s\n", todo.ID, todo.Description)
		fmt.Printf("    创建时间: %s\n", timeStr)
		
		// 如果不是最后一个，添加分隔线
		if todo.ID != todos[len(todos)-1].ID {
			fmt.Println("────────────────────────────────────────────────────────────────────────────────")
		}
	}
	
	fmt.Println("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━")
	fmt.Printf("总计: %d 个待办事项\n", len(todos))
}

// ShowInfo 显示信息
func (v *TodoView) ShowInfo(message string) {
	fmt.Printf("ℹ %s\n", message)
}

// ShowWarning 显示警告
func (v *TodoView) ShowWarning(message string) {
	fmt.Printf("⚠ %s\n", message)
}